/**
 * Copyright By Grandsoft Company Limited.  
 * 2014年11月11日 下午2:58:47
 */
package com.cws.dao.impl;


import java.lang.reflect.Field;
import java.util.Map;

import javax.persistence.Entity;
import javax.persistence.Transient;

import org.hibernate.dialect.Dialect;

import com.cws.exception.GenerateQLException;
import com.cws.exception.TransientException;

/**
 * HQL 查询语句生成器
 * <p>
 * <b>创建日期</b> 2014年11月11日
 * </p>
 * 
 * @author <a href="mailto:hemw@grandsoft.com.cn">何明旺</a>
 * @since 3.0.1-SNAPSHOT
 */
public class HQLGenerator extends GenerateQL {

    @Override
    public String generateQueryLanguage(Class<?> resultType, Map<String, ?> params, Dialect dialect)
            throws GenerateQLException {
        // 检查是否是PO类
        if (!resultType.isAnnotationPresent(Entity.class)) {
            throw new GenerateQLException(resultType.getName() + " isn't assigned with @" + Entity.class.getName());
        }
        return super.generateQueryLanguage(resultType, params, dialect);
    }

    @Override
    protected String getQueryColumns(Class<?> resultType) {
        return null;
    }

    @Override
    protected String getQueryTableName(Class<?> resultType, Map<String, ?> params, Dialect dialect) {
        return resultType.getName();
    }

    @Override
    protected String getColumnName(Field field) throws TransientException {
        if (isTransient(field)) {
            throw new TransientException("字段 [" + field + "] 被标注为 @" + Transient.class.getName());
        }
        return field.getName();
    }

}